package main

import (
	"fmt"
	"io"
	"os"
)

func main() {

	srcPath := "F:\\golang\\golang\\(传智播客)20小时快速入门go语言视频\\第5天视频\\3-视频\\24_文件案例：拷贝文件.mp4"
	dstPath := "C:\\Users\\55219\\Desktop\\copy.mp4"

	src, srcErr := os.OpenFile(srcPath, os.O_RDONLY, os.FileMode(0777))

	if srcErr != nil {

		fmt.Println(srcErr)
	}

	/*
	第一位是 - 代表是文件，第一位是d代表是目录，除去第一位后的9个字符中
	前三位代表所有者（owner）的权限，rwx代表读写权限和执行权限
	中间三位代表所属组（group）的权限，r-x代表有读和执行权限，没有写权限
	最后三位代表其他者(others)的权限，同样是读和执行权限，没有写权限
	更改权限用chmod命令，格式是chmod 用户名 文件或目录
	*/
	fmt.Println(os.FileMode(0755))
	fmt.Println(os.FileMode(0644))
	fmt.Println(os.FileMode(0777))

	src_info, _ := src.Stat()

	fmt.Println("src_info === " , src_info.Mode())



	dst, dstErr := os.OpenFile(dstPath, os.O_WRONLY|os.O_CREATE, 0777)

	dst_info, _ := dst.Stat()

	fmt.Println("dst_info === " , dst_info.Mode())

	if dstErr != nil {

		fmt.Println(dstErr)
	}

	b := make([] byte, 1024*8)

	for ; ; {

		n, err := src.Read(b)

		if err != nil && err == io.EOF {

			fmt.Println("读取完成!!")
			break
		}

		i, e := dst.Write(b[0:n])

		if e != nil {

			fmt.Println("Write err ", e)
			break
		}

		fmt.Println(i)

	}

	defer func() {
		src.Close()
		dst.Close()
	}()

}
